home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Sprite 1984 - 1993
/
Sprite 1984 - 1993.iso
/
src
/
cmds
/
dviselect
/
tfm.h
< prev
next >
Wrap
C/C++ Source or Header
|
1989-06-15
|
3KB
|
84 lines
/*
* Copyright (c) 1987 University of Maryland Department of Computer Science.
* All rights reserved. Permission to copy for any purpose is hereby granted
* so long as this copyright notice remains intact.
*/
/*
* TFM file information.
*/
/*
* TFM files start with a series of unsigned 16 bit integers. We
* read this into the structure `tfm_header'. These are type i32
* so that they may be used as integer quantities without concern
* as to sign extension.
*/
struct tfmheader {
i32 th_lf; /* length of the file (16 bit words) */
i32 th_lh; /* length of the header data (words) */
i32 th_bc; /* beginning character */
i32 th_ec; /* ending character (inclusive) */
i32 th_nw; /* number of words in width table */
i32 th_nh; /* number of words in height table */
i32 th_nd; /* number of words in depth table */
i32 th_ni; /* words in italic correction table */
i32 th_nl; /* words in ligature/kern table */
i32 th_nk; /* words in kern table */
i32 th_ne; /* words in extensible character table */
i32 th_np; /* number of font parameter words */
};
/*
* The remainder of the TFM file comprises the following information,
* all of which are 32 bit quantities:
*
* header: array [0..lh-1] of stuff
* char_info: array [bc..ec] of char_info_word
* width: array [0..nw-1] of fix_word
* height: array [0..nh-1] of fix_word
* depth: array [0..nd-1] of fix_word
* italic: array [0..ni-1] of fix_word
* lig_kern: array [0..nl-1] of lig_kern_command
* kern: array [0..ne-1] of extensible_recipie
* param: array [0..np-1] of fix_word
*/
/*
* A char_info_word is built of four unsigned eight-bit quantities. The first
* is an index into the width table (this saves 24 bits for every
* character that has the same width as another character). The
* second is a composite height and depth index. The third is a
* composite italic index and tag, and the fourth is a remainder.
*
* XXX needs explaining
*/
struct char_info_word {
char ci_width; /* width index */
char ci_h_d; /* height and depth index */
char ci_i_t; /* italic index and tag */
char ci_remainder; /* ??? */
};
/*
* These macros split up h_and_d and i_and_t values.
*/
#define T_CI_H(ci) (((ci)->ci_h_d >> 4) & 0xf)
#define T_CI_D(ci) ((ci)->ci_h_d & 0xf)
#define T_CI_I(ci) (((ci)->ci_i_t >> 2) & 0x3f)
#define T_CI_T(ci) ((ci)->ci_i_t & 3)
/*
* This structure contains everything one might need to know about
* a TFM file at run-time.
*
* XXX incomplete, or wrong, as yet
*/
struct tfmdata {
struct tfmheader t_hdr; /* full header */
struct char_info_word *t_ci; /* char info */
i32 *t_width; /* widths table */
i32 *t_height; /* heights */
i32 *t_depth; /* depths */
};